Ext.onReady(function ()
{
	//选择年份和周次
	//获得数据store
	var termData = Ext.create('Ext.data.Store',
		{
			model : 'TermModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/GetTermList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox

	//学期combobox
	var TermBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '学年:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : termData,
			queryMode : 'local',
			editable : false,
			disable : true,
			displayField : 'name',
			valueField : 'term_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					loadWeek(TermBox.getValue());
					getChecked();
				}
			}
		}
		);
	//获得数据store

	var roomData = Ext.create('Ext.data.Store',
		{
			model : 'RoomModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'room/getRoomList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);

	//数据填充入combobox
	var RoomNameBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '实验室:',
			emptyText : '请选择要安排的实验室',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : roomData,
			queryMode : 'local',
			editable : false,
			name : 'room_id',
			hiddenName : 'room_id',
			displayField : 'name',
			valueField : 'room_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					getChecked();
				}
			}
		}
		);

	//获得数据store
	var courseData = Ext.create('Ext.data.Store',
		{
			model : 'CourseModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'course/getUserCourse',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//载入课程
	var CourseNameBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '课程:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : courseData,
			queryMode : 'local',
			editable : false,
			displayField : 'name',
			valueField : 'course_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					getChecked();
				}
			}
		}
		);

	var weekData = Ext.create('Ext.data.Store',
		{
			model : 'WeekModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/getWeekList?tid=0',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//获得数据store
	function loadWeek(tid)
	{
		//重新获得一个store，这样比较麻烦，但是很管用
		WeekGrid.store.removeAll();
		weekData = Ext.create('Ext.data.Store',
			{
				model : 'WeekModel',
				proxy :
				{
					type : 'ajax',
					url : basePath + 'term/getWeekList?tid=' + tid,
					reader :
					{
						type : 'json',
						root : 'root'
					}
				},
				autoLoad : true
			}
			);
		//bindStore被标记为不安全的用法，但是能有效解决不能显示重新绑定的store的问题
		WeekGrid.bindStore(weekData);
	}

	//获得数据store
	var periodData = Ext.create('Ext.data.Store',
		{
			model : 'PeriodModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'term/getPeriodList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//数据填充入combobox
	var PeriodBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '节次:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : periodData,
			queryMode : 'local',
			editable : false,
			displayField : 'period_info',
			valueField : 'period_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					getChecked();
				}
			}
		}
		);

	var dayData = [
		['0', '周一'],
		['1', '周二'],
		['2', '周三'],
		['3', '周四'],
		['4', '周五'],
		['5', '周六'],
		['6', '周日']
	]

	var DayOfWeekBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '星期几:',
			emptyText : '请选择',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : new Ext.data.SimpleStore(
			{
				fields : ['value', 'text'],
				data : dayData
			}
			),
			queryMode : 'local',
			editable : false,
			displayField : 'text',
			valueField : 'value',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					getChecked();
				}
			}
		}
		);

	//表格头部
	var columns = [
		{
			header : '周次',
			dataIndex : 'week_describe',
			width : '30%'
		},
		{
			header : '开始日期（周一）',
			dataIndex : 'start_date',
			width : '30%'
		},
		{
			header : '结果',
			dataIndex : 'res',
			width : '40%'
		}
	];

	var WeekGrid = new Ext.grid.GridPanel(
		{
			title : '安排周次:',
			frame : false,
			selModel : new Ext.selection.CheckboxModel(
			{
				checkOnly : true
			}
			),
			store : weekData,
			enableHdMenu : false,
			enableColumnHide : false,
			columnLines : true,
			columns : columns,
			stripeRows : true,
			loadMask : true
		}
		);

	function getChecked()
	{
		if (TermBox.getValue() == null || RoomNameBox.getValue() == null || CourseNameBox.getValue() == null || DayOfWeekBox.getValue() == null || PeriodBox.getValue() == null)
			return;
		Ext.Ajax.request(
		{
			url : basePath + 'course/GetCoursePlanChecked?tid=' + TermBox.getValue() + '&day=' + DayOfWeekBox.getValue() + '&pid=' + PeriodBox.getValue() + '&rid=' + RoomNameBox.getValue() + '&cid=' + CourseNameBox.getValue(),
			method : 'POST',
			success : function (response)
			{
				//将返回的结果转换为json对象，注意extjs4中decode函数已经变成了：Ext.JSON.decode
				var json = Ext.JSON.decode(response.responseText); //获得后台传递json
				WeekGrid.getSelectionModel().deselectAll();
				for (x in json)
				{
					var index = weekData.find('week_id', json[x].wid);
					WeekGrid.getSelectionModel().select(index, true, false);
				}
			}
		}
		)
	}

	function submitForm()
	{
		var record = WeekGrid.getSelectionModel();
		var t = 0;
		for (var i = 0; i < WeekGrid.getStore().getTotalCount(); i++)
		{
			var urlString = "";
			if (record.isSelected(i))
			{
				urlString = basePath + 'course/SetSchedule?oid=' + i + '&tid=' + TermBox.getValue() + '&day=' + DayOfWeekBox.getValue() + '&pid=' + PeriodBox.getValue() + '&rid=' + RoomNameBox.getValue() + '&cid=' + CourseNameBox.getValue() + '&wid=' + WeekGrid.getStore().getAt(i).get('week_id') + '&status=true';
			}
			else
			{
				urlString = basePath + 'course/SetSchedule?oid=' + i + '&tid=' + TermBox.getValue() + '&day=' + DayOfWeekBox.getValue() + '&pid=' + PeriodBox.getValue() + '&rid=' + RoomNameBox.getValue() + '&cid=' + CourseNameBox.getValue() + '&wid=' + WeekGrid.getStore().getAt(i).get('week_id') + '&status=false';
			}
			//因为是异步请求，i在返回success时候会为3
			Ext.Ajax.request(
			{
				url : urlString,
				method : 'POST',
				success : function (response)
				{
					//将返回的结果转换为json对象，注意extjs4中decode函数已经变成了：Ext.JSON.decode
					var json = Ext.JSON.decode(response.responseText); //获得后台传递json
					WeekGrid.getStore().getAt(json.oid).set('res', json.res);
					t++;
				}
			}
			);
		}
		//弹窗的体验很不好！
		//Ext.Msg.alert('修改完成！','请查看结果！');

	}

	//显示主窗体
	var CoursePlanForm = Ext.create("Ext.form.FormPanel",
		{
			title : '批量实验室课程安排',
			frame : false,
			defaultType : 'textfield',
			renderTo : 'showCoursePlanDiv',
			defaults :
			{
				labelWidth : 100,
				labelAlign : "right"
			},
			items : [
				TermBox,
				RoomNameBox,
				CourseNameBox,
				DayOfWeekBox,
				PeriodBox,
				WeekGrid
			],
			buttons : [
				{
					text : '确定',
					handler : function ()
					{
						submitForm();
					}
				}
			]
		}
		);
}
);
